﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ImobitechDao;
using ImobitechDao.Repositories;


namespace ImobitechModel.Facade
{
    public class GestaoFacade
    {
        private static GestaoFacade instance;

        private GestaoFacade()
        {

        }

        public static GestaoFacade getInstance()
        {
            if (instance == null)
                instance = new GestaoFacade();

            return instance;
        }

        public Object inserirTreinamento(Treinamento treinamento)
        {
            ITreinamentoRepository _treinamentoRepositorio = new TreinamentoRepository(Contexto.Instance.Context);
            return _treinamentoRepositorio.Create(treinamento);
        }

        public Object editaTreinamento(Treinamento treinamento)
        {
            ITreinamentoRepository _treinamentoRepositorio = new TreinamentoRepository(Contexto.Instance.Context);
            return _treinamentoRepositorio.Update(treinamento);
        }

        public Object retornaTreinamento(int id)
        {
            ITreinamentoRepository _treinamentoRepositorio = new TreinamentoRepository(Contexto.Instance.Context);
            return _treinamentoRepositorio.GetById(id);
        }
        public Object retornaTreinamentos()
        {
            ITreinamentoRepository _treinamentoRepositorio = new TreinamentoRepository(Contexto.Instance.Context);
            return _treinamentoRepositorio.GetAll();
        }

        public Object cadastrarConta(Contas conta)
        {
            IContasRepository _contaRepositorio = new ContasRepository(Contexto.Instance.Context);
            return _contaRepositorio.Create(conta);
        }

        public Object retornaCategorias()
        {
            ICategoriaContaRepository _categoriaContaRepositorio = new CategoriaContaRepository(Contexto.Instance.Context);
            return _categoriaContaRepositorio.GetAll();
        }

        public Object retornaCategoria(int id)
        {
            ICategoriaContaRepository _categoriaContaRepositorio = new CategoriaContaRepository(Contexto.Instance.Context);
            return _categoriaContaRepositorio.GetById(id);
        }

        public Object retornaFluxo(int mes, List<CategoriaConta> categorias, int tipo)
        {
            IContasRepository _contaRepositorio = new ContasRepository(Contexto.Instance.Context);
            return _contaRepositorio.retornaFluxoCaixa(mes, categorias, tipo);
        }

        public Object retornaFluxo(int mes, int ano, int categoria, int tipo)
        {
            IContasRepository _contaRepositorio = new ContasRepository(Contexto.Instance.Context);
            return _contaRepositorio.retornaFluxoCaixa(mes, ano, categoria, tipo);
        }

        public Object retornaConta(int id)
        {
            IContasRepository _contaRepositorio = new ContasRepository(Contexto.Instance.Context);
            return _contaRepositorio.GetById(id);
        }

        public Object retornaParcela(int id)
        {
            IParcelaContaRepository _parcelaContaRepository = new ParcelaContaRepository(Contexto.Instance.Context);
            return _parcelaContaRepository.GetById(id);
        }

        public Object updateParcela(ParcelaConta parcela)
        {
            IParcelaContaRepository _parcelaContaRepository = new ParcelaContaRepository(Contexto.Instance.Context);
            return _parcelaContaRepository.Update(parcela);
        }

        public Object retornaVisitas(Pessoa_Papel papel)
        {
            IVisitaRepository _visitaRepositorio = new VisitaRepository(Contexto.Instance.Context);
            return _visitaRepositorio.buscaHorarios(papel);
        }

        public Object retornaImoveis(string cidade, string endereco, string[] bairro, int tipoImovel, string estado, int areaprivada, string nomeDono)
        {
            ImovelRepository _imovelRepositorio = new ImovelRepository(Contexto.Instance.Context);
            return _imovelRepositorio.getBusca(cidade, endereco, bairro, tipoImovel, estado, areaprivada, nomeDono);
        }

        public Object retornaImoveis(int id)
        {
            ImovelRepository _imovelRepositorio = new ImovelRepository(Contexto.Instance.Context);
            return _imovelRepositorio.getBusca(id);
        }

        public Object retornaAnuncios(int idImovel)
        {
            IAnuncioRepository _anuncioRepositorio = new AnuncioRepository(Contexto.Instance.Context);
            return _anuncioRepositorio.getAll(idImovel);
        }

        public Object retornaAnuncio(int id)
        {
            IAnuncioRepository _anuncioRepositorio = new AnuncioRepository(Contexto.Instance.Context);
            return _anuncioRepositorio.GetById(id);
        }

        public Object editaAnuncio(Anuncio anuncio)
        {
            IAnuncioRepository _anuncioRepositorio = new AnuncioRepository(Contexto.Instance.Context);
            return _anuncioRepositorio.Update(anuncio);
        }

        public Object retornaCandidatos()
        {
            ICandidatoRepository _candidatoRepositorio = new CandidatoRepository(Contexto.Instance.Context);
            return _candidatoRepositorio.GetAll();
        }

        public Object retornaCandidato(int id)
        {
            ICandidatoRepository _candidatoRepositorio = new CandidatoRepository(Contexto.Instance.Context);
            return _candidatoRepositorio.GetById(id);
        }

        public Object retirarcandidato(int id)
        {
            ICandidatoRepository _candidatoRepositorio = new CandidatoRepository(Contexto.Instance.Context);
            return _candidatoRepositorio.Delete(id);
        }

        public Object buscaLocatarios()
        {
            IPessoaPapelImovelRepository _pessoaPapelRepositorio = new PessoaPapelImovelRepository(Contexto.Instance.Context);
            return _pessoaPapelRepositorio.retornaLocatarios();
        }

        public Object cadastrarPapelImovel(Pessoa_Papel_Imovel pessoaImovel)
        {
            IPessoaPapelImovelRepository _pessoaPapelImovelRepositorio = new PessoaPapelImovelRepository(Contexto.Instance.Context);
            return _pessoaPapelImovelRepositorio.Create(pessoaImovel);
        }
    }
}
